home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 85 / CD Temático 40 Febrero 2004.iso / DOS / testdisk / src / ext2fs / ext2_io.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-04-03  |  2.7 KB  |  101 lines

  1. /*
  2.  * io.h --- the I/O manager abstraction
  3.  * 
  4.  * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
  5.  *
  6.  * %Begin-Header%
  7.  * This file may be redistributed under the terms of the GNU Public
  8.  * License.
  9.  * %End-Header%
  10.  */
  11.  
  12. #ifndef _EXT2FS_EXT2_IO_H
  13. #define _EXT2FS_EXT2_IO_H
  14.  
  15. /*
  16.  * ext2_loff_t is defined here since unix_io.c needs it.
  17.  */
  18. #if defined(__GNUC__) || defined(HAS_LONG_LONG)
  19. typedef long long    ext2_loff_t;
  20. #else
  21. typedef long        ext2_loff_t;
  22. #endif
  23.  
  24. /* llseek.c */
  25. ext2_loff_t ext2fs_llseek (int, ext2_loff_t, int);
  26.  
  27. typedef struct struct_io_manager *io_manager;
  28. typedef struct struct_io_channel *io_channel;
  29.  
  30. #define CHANNEL_FLAGS_WRITETHROUGH    0x01
  31.  
  32. struct struct_io_channel {
  33.     errcode_t    magic;
  34.     io_manager    manager;
  35.     char        *name;
  36.     int        block_size;
  37.     errcode_t    (*read_error)(io_channel channel,
  38.                       unsigned long block,
  39.                       int count,
  40.                       void *data,
  41.                       size_t size,
  42.                       int actual_bytes_read,
  43.                       errcode_t    error);
  44.     errcode_t    (*write_error)(io_channel channel,
  45.                        unsigned long block,
  46.                        int count,
  47.                        const void *data,
  48.                        size_t size,
  49.                        int actual_bytes_written,
  50.                        errcode_t error);
  51.     int        refcount;
  52.     int        flags;
  53.     int        reserved[14];
  54.     void        *private_data;
  55.     void        *app_data;
  56. };
  57.  
  58. struct struct_io_manager {
  59.     errcode_t magic;
  60.     const char *name;
  61.     errcode_t (*open)(const char *name, int flags, io_channel *channel);
  62.     errcode_t (*close)(io_channel channel);
  63.     errcode_t (*set_blksize)(io_channel channel, int blksize);
  64.     errcode_t (*read_blk)(io_channel channel, unsigned long block,
  65.                   int count, void *data);
  66.     errcode_t (*write_blk)(io_channel channel, unsigned long block,
  67.                    int count, const void *data);
  68.     errcode_t (*flush)(io_channel channel);
  69.     errcode_t (*write_byte)(io_channel channel, unsigned long offset,
  70.                 int count, const void *data);
  71.     int        reserved[15];
  72. };
  73.  
  74. #define IO_FLAG_RW    1
  75.  
  76. /*
  77.  * Convenience functions....
  78.  */
  79. #define io_channel_close(c)         ((c)->manager->close((c)))
  80. #define io_channel_set_blksize(c,s)    ((c)->manager->set_blksize((c),s))
  81. #define io_channel_read_blk(c,b,n,d)    ((c)->manager->read_blk((c),b,n,d))
  82. #define io_channel_write_blk(c,b,n,d)    ((c)->manager->write_blk((c),b,n,d))
  83. #define io_channel_flush(c)         ((c)->manager->flush((c)))
  84. #define io_channel_write_byte(c,b,n,d)    ((c)->manager->write_byte((c),b,n,d))
  85. #define io_channel_bumpcount(c)        ((c)->refcount++)
  86.     
  87. /* unix_io.c */
  88. extern io_manager unix_io_manager;
  89.  
  90. /* test_io.c */
  91. extern io_manager test_io_manager, test_io_backing_manager;
  92. extern void (*test_io_cb_read_blk)
  93.     (unsigned long block, int count, errcode_t err);
  94. extern void (*test_io_cb_write_blk)
  95.     (unsigned long block, int count, errcode_t err);
  96. extern void (*test_io_cb_set_blksize)
  97.     (int blksize, errcode_t err);
  98.  
  99. #endif /* _EXT2FS_EXT2_IO_H */
  100.     
  101.